#define xuser mixc::powerful_cat
#include"lang/cxx/ignore_case.hpp"
#include"lang/cxx/index_of_first.hpp"
#include"lang/cxx.hpp"
#include"mixc.hpp"
#include"utils/counter.hpp"

xinit(xuser::the_main){
    using namespace xuser;
    counter demo = 0;

    // 演示：寻找第一个出现字符（串）的索引
    {
        xhint(demo);

        //         0123456789abcd
        c08 str = "cAt... pass...";

        // index = 8
        xhint(str.index_of_first('a'));
        xhint(str.index_of_first("a"));
    }

    // 演示：寻找第一个出现字符（串）的索引，忽略大小写
    {
        xhint(demo);

        //         0123456789abcd
        c08 str = "cAt... pass...";

        // index = 1
        xhint(str.index_of_first('a', ignore_case<char>));
        xhint(str.index_of_first("a", ignore_case<char>));
    }

    // 演示：寻找第一个出现字符（串）序列的索引
    {
        xhint(demo);

        //             0123456789abcd
        c08 str     = "cat... pass...";
        auto pair   = str.index_of_first({ 'x', 's' }/*pattern list*/);

        // i_mian 表示匹配 str 中字符的下标，
        // i_pattern 表示 { 'x', 's' } 中的字符下标，排在前面的先匹配，
        xhint(pair->i_main, pair->i_pattern);

        // 由于 's' 比 'x' 先出现，所以即使在 pattern 列表中 'x' 的优先级高于 's'，
        // 那么也是按照先匹配的处理
        str         = "aaasx";
        pair        = str.index_of_first({ 'x', 's' }/*pattern list*/);
        xhint(pair->i_main, pair->i_pattern);
    }
};
